#ifndef _STFT_H_
#define _STFT_H_

// #ifdef __cplusplus
// #if __cplusplus
// extern "C" {
// #endif
// #endif /* End of #ifdef __cplusplus */
#include "rk_comm_aenc.h"
#include "rk_comm_adec.h"
#include "rknn_api.h"
#include <vector>
#include <stdio.h>

#ifdef __cplusplus
extern "C"
{
#endif

using namespace std;
#define PI 3.1415926


// #define USE_AO_MIXER 0

#ifdef DEBUG_FLAG
#undef DEBUG_FLAG
#endif
#define DEBUG_FLAG 0x0


    // stft related
    typedef struct _rkToolKitCfg
    {
        char *model_path;
        rknn_context ctx;
        int loop_count;
        rknn_tensor_type input_type;
        rknn_tensor_format input_layout;
        rknn_input_output_num io_num;
        rknn_tensor_attr input_attrs[1];
        rknn_tensor_attr output_attrs[1];
        rknn_tensor_mem *output_mems[1];
        rknn_tensor_mem *input_mems[1];
        rknn_tensor_attr orig_output_attrs[1];
        int8_t *output_mems_nchw[1];
        int ret;
    } TEST_TOOLKIT_CFG;

    // 函数定义-AIO
    RK_U64 TEST_COMM_GetNowUs();
    void arr_initial(RK_U8 ****dt, int dim1, int dim2, int dim3, int dim4);
    void arr_initialf(float ****dt, int dim1, int dim2, int dim3, int dim4);

    void arr_memfree(RK_U8 ****dt, int dim1, int dim2, int dim3, int dim4);
    void arr_memfreef(float ****dt, int dim1, int dim2, int dim3, int dim4);

    void hanning(int win_size, float *buffer);
    // void stft_dccrn(vector<float>& input, RK_U8 ****tmp_out);
    // int istft_dccrn(RK_U8 ****istft_in,RK_U8* tmp_out);
    void arr_memfree(RK_U8 ****dt, int dim1, int dim2, int dim3, int dim4);


    // AIO
    RK_S32 test_ai_poll_event(RK_S32 timeoutMsec, RK_S32 fd);

// #ifdef __cplusplus
// #if __cplusplus
// }
// #endif
// #endif /* End of #ifdef __cplusplus */
#ifdef __cplusplus
}
#endif

#endif
